const { 
  addOneOwnBox,   // 添加宝箱到已拥有宝箱
  decodeBoxOverTimeKey,   //解码宝箱redis超时字段
  getwaitBoxNum,   // 获取待领取宝箱数量
  endCountDown,   // 宝箱倒计时自然结束
} = require('../lib/action');
const utils = require('../../../util/utils');

module.exports = function (app) { return new Handler(app); };
let Handler = function (app) { this.app = app; };
let handler = Handler.prototype;

// 从Mongo中获取待收取宝箱数量
handler.getWaitBoxNum = async function (uid, cb) { 
  try{
    // 获取待领取宝箱
    let waitOpenBoxLen = await getwaitBoxNum.call(this, uid);
    // 调用回调
    utils.invokeCallback(cb, null, { waitOpenBoxLen });
  }catch(err){
    console.error(err);
    utils.invokeCallback(cb, err);
  }
}

// 系统随机增加客户端已拥有宝箱，并通知客户
handler.deliverChest = async function (uid, sid, boxId, cb) {
  try{
    // 添加宝箱到已拥有宝箱
    await addOneOwnBox.call(this, uid, sid, boxId);
    // 调用回调
    utils.invokeCallback(cb);
  }catch(err){
    console.error(err);
    utils.invokeCallback(cb, err);
  }
}

// 宝箱倒计时自然结束
handler.endCountDown = async function (key, cb){
  try{
    //宝箱倒计时结束
    await endCountDown.call(this, key);
    // 调用回调
    utils.invokeCallback(cb);
  }catch(err){
    console.error(err);
    utils.invokeCallback(cb, err);
  }
}
